/**
 * 工具函数
 */

/**
 * 生成随机数
 * @param minNum - 最小值或最大值（当只有一个参数时）
 * @param maxNum - 最大值（可选）
 * @returns 随机数
 */
export function randomNum(minNum: number, maxNum?: number): number {
    if (maxNum === undefined) {
        return Math.floor(Math.random() * minNum);
    }
    return Math.floor(Math.random() * (maxNum - minNum + 1) + minNum);
}

/**
 * 从数组中随机选择一个元素
 * @param array - 数组
 * @returns 随机元素
 */
export function randomChoice<T>(array: T[]): T {
    return array[randomNum(0, array.length - 1)];
}

/**
 * 深拷贝对象
 * @param obj - 要拷贝的对象
 * @returns 拷贝后的对象
 */
export function deepClone<T>(obj: T): T {
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }
    
    if (obj instanceof Array) {
        return obj.map(item => deepClone(item)) as unknown as T;
    }
    
    const cloned = {} as T;
    for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
            cloned[key] = deepClone(obj[key]);
        }
    }
    
    return cloned;
}
